package com.xusj.classAndObject

/**
 * (1)在上面单例对象的文件下，
 * 我们可以定义一个class Person，class Person 称为object Person的伴生类，
 * object Person 称为class Person的伴生对象。
 *
 * （2）
 * 之前创建List对象时，我们采用List(1, 2, 3)来实例化一个对象，有没有考虑过，
 * 为什么没有new关键字呢，其实我们通过这种方式创建对象时，
 * 默认调用的是该类的伴生对象的apply方法，我们可以自己实现apply方法。
 *
 * @author xushijian
 * @date 2020/5/18 17:43
 *
 */
class Person(var name: String, var age: Int, var city: String = "BeiJing") {
  override def toString() = "name: %s, age: %s, city: %s".format(name, age, city)
}

object Person {

  def apply(name: String, age: Int): Person = new Person(name, age)

  def main(args: Array[String]): Unit = {

    //原有创建
    println(new Person("没长正", 18))

    //实现apply后的方法
    println(Person("manman", 1))
  }

}
